home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1998 January: Technology Seed / Jan. '98 ATS.toast / QuickTime™ 3.0b11 / QTPublicInterfaces / CIncludes / QD3DPick.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-01-12  |  8.9 KB  |  339 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        QD3DPick.h
  3.  
  4.      Contains:    Q3Pick methods                                    
  5.  
  6.      Version:    Technology:    Quickdraw 3D 1.5.1
  7.                  Release:    QuickTime 3.0 Beta
  8.  
  9.      Copyright:    © 1995-1997 by Apple Computer, Inc., all rights reserved.
  10.  
  11.      Bugs?:        Please include the the file and version information (from above) with
  12.                  the problem description.  Developers belonging to one of the Apple
  13.                  developer programs can submit bug reports to:
  14.  
  15.                      devsupport@apple.com
  16.  
  17. */
  18. #ifndef __QD3DPICK__
  19. #define __QD3DPICK__
  20.  
  21. #ifndef __QD3D__
  22. #include <QD3D.h>
  23. #endif
  24.  
  25. #ifndef __QD3DSTYLE__
  26. #include <QD3DStyle.h>
  27. #endif
  28. #ifndef __QD3DGEOMETRY__
  29. #include <QD3DGeometry.h>
  30. #endif
  31.  
  32.  
  33.  
  34. #if PRAGMA_ONCE
  35. #pragma once
  36. #endif
  37.  
  38. #ifdef __cplusplus
  39. extern "C" {
  40. #endif
  41.  
  42. #if PRAGMA_IMPORT
  43. #pragma import on
  44. #endif
  45.  
  46. #if PRAGMA_STRUCT_ALIGN
  47.     #pragma options align=power
  48. #elif PRAGMA_STRUCT_PACKPUSH
  49.     #pragma pack(push, 2)
  50. #elif PRAGMA_STRUCT_PACK
  51.     #pragma pack(2)
  52. #endif
  53.  
  54. #if PRAGMA_ENUM_ALWAYSINT
  55.     #pragma enumsalwaysint on
  56. #elif PRAGMA_ENUM_OPTIONS
  57.     #pragma option enum=int
  58. #elif PRAGMA_ENUM_PACK
  59.     #if __option(pack_enums)
  60.         #define PRAGMA_ENUM_PACK__QD3DPICK__
  61.     #endif
  62.     #pragma options(!pack_enums)
  63. #endif
  64.  
  65. /*****************************************************************************
  66.  **                                                                            **
  67.  **                            Mask bits for hit information                     **
  68.  **                                                                            **
  69.  *****************************************************************************/
  70.  
  71. enum {
  72.     kQ3PickDetailNone            = 0,
  73.     kQ3PickDetailMaskPickID        = 1 << 0,
  74.     kQ3PickDetailMaskPath        = 1 << 1,
  75.     kQ3PickDetailMaskObject        = 1 << 2,
  76.     kQ3PickDetailMaskLocalToWorldMatrix = 1 << 3,
  77.     kQ3PickDetailMaskXYZ        = 1 << 4,
  78.     kQ3PickDetailMaskDistance    = 1 << 5,
  79.     kQ3PickDetailMaskNormal        = 1 << 6,
  80.     kQ3PickDetailMaskShapePart    = 1 << 7,
  81.     kQ3PickDetailMaskPickPart    = 1 << 8,
  82.     kQ3PickDetailMaskUV            = 1 << 9
  83. };
  84.  
  85. typedef unsigned long                     TQ3PickDetailMasks;
  86. typedef unsigned long                     TQ3PickDetail;
  87. /******************************************************************************
  88.  **                                                                             **
  89.  **                                Hitlist sorting                                 **
  90.  **                                                                             **
  91.  *****************************************************************************/
  92.  
  93. enum {
  94.     kQ3PickSortNone                = 0,
  95.     kQ3PickSortNearToFar        = 1,
  96.     kQ3PickSortFarToNear        = 2
  97. };
  98.  
  99. typedef unsigned long                     TQ3PickSort;
  100. /******************************************************************************
  101.  **                                                                             **
  102.  **                    Data structures to set up the pick object                 **
  103.  **                                                                             **
  104.  *****************************************************************************/
  105. #define kQ3ReturnAllHits        0
  106.  
  107. struct TQ3PickData {
  108.     TQ3PickSort                     sort;
  109.     TQ3PickDetail                     mask;
  110.     unsigned long                     numHitsToReturn;
  111. };
  112. typedef struct TQ3PickData                TQ3PickData;
  113.  
  114. struct TQ3WindowPointPickData {
  115.     TQ3PickData                     data;
  116.     TQ3Point2D                         point;
  117.     float                             vertexTolerance;
  118.     float                             edgeTolerance;
  119. };
  120. typedef struct TQ3WindowPointPickData    TQ3WindowPointPickData;
  121.  
  122. struct TQ3WindowRectPickData {
  123.     TQ3PickData                     data;
  124.     TQ3Area                         rect;
  125. };
  126. typedef struct TQ3WindowRectPickData    TQ3WindowRectPickData;
  127. /******************************************************************************
  128.  **                                                                             **
  129.  **                                    Hit data                                 **
  130.  **                                                                             **
  131.  *****************************************************************************/
  132.  
  133. struct TQ3HitPath {
  134.     TQ3GroupObject                     rootGroup;
  135.     unsigned long                     depth;
  136.     TQ3GroupPosition *                positions;
  137. };
  138. typedef struct TQ3HitPath                TQ3HitPath;
  139. /*
  140.  *    The following data structure has been obsoleted by
  141.  *    the Q3Pick_GetPickDetailData function in conjunction
  142.  *    with the pickDetailValue enum
  143.  */
  144.  
  145. struct TQ3HitData {
  146.     TQ3PickParts                     part;
  147.     TQ3PickDetail                     validMask;
  148.     unsigned long                     pickID;
  149.     TQ3HitPath                         path;
  150.     TQ3Object                         object;
  151.     TQ3Matrix4x4                     localToWorldMatrix;
  152.     TQ3Point3D                         xyzPoint;
  153.     float                             distance;
  154.     TQ3Vector3D                     normal;
  155.     TQ3ShapePartObject                 shapePart;
  156. };
  157. typedef struct TQ3HitData                TQ3HitData;
  158. /******************************************************************************
  159.  **                                                                             **
  160.  **                                Pick class methods                             **
  161.  **                                                                             **
  162.  *****************************************************************************/
  163. EXTERN_API_C( TQ3ObjectType )
  164. Q3Pick_GetType                    (TQ3PickObject             pick);
  165.  
  166. EXTERN_API_C( TQ3Status )
  167. Q3Pick_GetData                    (TQ3PickObject             pick,
  168.                                  TQ3PickData *            data);
  169.  
  170. EXTERN_API_C( TQ3Status )
  171. Q3Pick_SetData                    (TQ3PickObject             pick,
  172.                                  const TQ3PickData *    data);
  173.  
  174. EXTERN_API_C( TQ3Status )
  175. Q3Pick_GetVertexTolerance        (TQ3PickObject             pick,
  176.                                  float *                vertexTolerance);
  177.  
  178. EXTERN_API_C( TQ3Status )
  179. Q3Pick_GetEdgeTolerance            (TQ3PickObject             pick,
  180.                                  float *                edgeTolerance);
  181.  
  182. EXTERN_API_C( TQ3Status )
  183. Q3Pick_SetVertexTolerance        (TQ3PickObject             pick,
  184.                                  float                     vertexTolerance);
  185.  
  186. EXTERN_API_C( TQ3Status )
  187. Q3Pick_SetEdgeTolerance            (TQ3PickObject             pick,
  188.                                  float                     edgeTolerance);
  189.  
  190. EXTERN_API_C( TQ3Status )
  191. Q3Pick_GetNumHits                (TQ3PickObject             pick,
  192.                                  unsigned long *        numHits);
  193.  
  194. EXTERN_API_C( TQ3Status )
  195. Q3Pick_EmptyHitList                (TQ3PickObject             pick);
  196.  
  197. EXTERN_API_C( TQ3Status )
  198. Q3Pick_GetPickDetailValidMask    (TQ3PickObject             pick,
  199.                                  unsigned long             index,
  200.                                  TQ3PickDetail *        pickDetailValidMask);
  201.  
  202. EXTERN_API_C( TQ3Status )
  203. Q3Pick_GetPickDetailData        (TQ3PickObject             pick,
  204.                                  unsigned long             index,
  205.                                  TQ3PickDetail             pickDetailValue,
  206.                                  void *                    detailData);
  207.  
  208. EXTERN_API_C( TQ3Status )
  209. Q3HitPath_EmptyData                (TQ3HitPath *            hitPath);
  210.  
  211.  
  212. /*
  213.  *    The following functions have been superseeded
  214.  *    by the Q3Pick_GetPickDetailData function
  215.  */
  216. EXTERN_API_C( TQ3Status )
  217. Q3Pick_GetHitData                (TQ3PickObject             pick,
  218.                                  unsigned long             index,
  219.                                  TQ3HitData *            hitData);
  220.  
  221. EXTERN_API_C( TQ3Status )
  222. Q3Hit_EmptyData                    (TQ3HitData *            hitData);
  223.  
  224.  
  225.  
  226. /******************************************************************************
  227.  **                                                                             **
  228.  **                            Window point pick methods                         **
  229.  **                                                                             **
  230.  *****************************************************************************/
  231. EXTERN_API_C( TQ3PickObject )
  232. Q3WindowPointPick_New            (const TQ3WindowPointPickData * data);
  233.  
  234. EXTERN_API_C( TQ3Status )
  235. Q3WindowPointPick_GetPoint        (TQ3PickObject             pick,
  236.                                  TQ3Point2D *            point);
  237.  
  238. EXTERN_API_C( TQ3Status )
  239. Q3WindowPointPick_SetPoint        (TQ3PickObject             pick,
  240.                                  const TQ3Point2D *        point);
  241.  
  242. EXTERN_API_C( TQ3Status )
  243. Q3WindowPointPick_GetData        (TQ3PickObject             pick,
  244.                                  TQ3WindowPointPickData * data);
  245.  
  246. EXTERN_API_C( TQ3Status )
  247. Q3WindowPointPick_SetData        (TQ3PickObject             pick,
  248.                                  const TQ3WindowPointPickData * data);
  249.  
  250.  
  251. /******************************************************************************
  252.  **                                                                             **
  253.  **                            Window rect pick methods                         **
  254.  **                                                                             **
  255.  *****************************************************************************/
  256. EXTERN_API_C( TQ3PickObject )
  257. Q3WindowRectPick_New            (const TQ3WindowRectPickData * data);
  258.  
  259. EXTERN_API_C( TQ3Status )
  260. Q3WindowRectPick_GetRect        (TQ3PickObject             pick,
  261.                                  TQ3Area *                rect);
  262.  
  263. EXTERN_API_C( TQ3Status )
  264. Q3WindowRectPick_SetRect        (TQ3PickObject             pick,
  265.                                  const TQ3Area *        rect);
  266.  
  267. EXTERN_API_C( TQ3Status )
  268. Q3WindowRectPick_GetData        (TQ3PickObject             pick,
  269.                                  TQ3WindowRectPickData * data);
  270.  
  271. EXTERN_API_C( TQ3Status )
  272. Q3WindowRectPick_SetData        (TQ3PickObject             pick,
  273.                                  const TQ3WindowRectPickData * data);
  274.  
  275.  
  276.  
  277. /******************************************************************************
  278.  **                                                                             **
  279.  **                                Shape Part methods                             **
  280.  **                                                                             **
  281.  *****************************************************************************/
  282. EXTERN_API_C( TQ3ObjectType )
  283. Q3ShapePart_GetType                (TQ3ShapePartObject     shapePartObject);
  284.  
  285. EXTERN_API_C( TQ3ObjectType )
  286. Q3MeshPart_GetType                (TQ3MeshPartObject         meshPartObject);
  287.  
  288. EXTERN_API_C( TQ3Status )
  289. Q3ShapePart_GetShape            (TQ3ShapePartObject     shapePartObject,
  290.                                  TQ3ShapeObject *        shapeObject);
  291.  
  292. EXTERN_API_C( TQ3Status )
  293. Q3MeshPart_GetComponent            (TQ3MeshPartObject         meshPartObject,
  294.                                  TQ3MeshComponent *        component);
  295.  
  296. EXTERN_API_C( TQ3Status )
  297. Q3MeshFacePart_GetFace            (TQ3MeshFacePartObject     meshFacePartObject,
  298.                                  TQ3MeshFace *            face);
  299.  
  300. EXTERN_API_C( TQ3Status )
  301. Q3MeshEdgePart_GetEdge            (TQ3MeshEdgePartObject     meshEdgePartObject,
  302.                                  TQ3MeshEdge *            edge);
  303.  
  304. EXTERN_API_C( TQ3Status )
  305. Q3MeshVertexPart_GetVertex        (TQ3MeshVertexPartObject  meshVertexPartObject,
  306.                                  TQ3MeshVertex *        vertex);
  307.  
  308.  
  309.  
  310.  
  311. #if PRAGMA_ENUM_ALWAYSINT
  312.     #pragma enumsalwaysint reset
  313. #elif PRAGMA_ENUM_OPTIONS
  314.     #pragma option enum=reset
  315. #elif defined(PRAGMA_ENUM_PACK__QD3DPICK__)
  316.     #pragma options(pack_enums)
  317. #endif
  318.  
  319. #if PRAGMA_STRUCT_ALIGN
  320.     #pragma options align=reset
  321. #elif PRAGMA_STRUCT_PACKPUSH
  322.     #pragma pack(pop)
  323. #elif PRAGMA_STRUCT_PACK
  324.     #pragma pack()
  325. #endif
  326.  
  327. #ifdef PRAGMA_IMPORT_OFF
  328. #pragma import off
  329. #elif PRAGMA_IMPORT
  330. #pragma import reset
  331. #endif
  332.  
  333. #ifdef __cplusplus
  334. }
  335. #endif
  336.  
  337. #endif /* __QD3DPICK__ */
  338.  
  339.